home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / tosfixes / fix_gdos.lzh / FIX_GDOS.S < prev    next >
Text File  |  1991-03-03  |  5KB  |  212 lines

  1. ; Fix GDOS
  2. ;
  3. SUPER:
  4. ;
  5. start:                                  ;lea.l  start-256, a1
  6.                 movea.l SP,A1
  7.                 movea.l 4(A1),A1        ; start der Basepage
  8.                 move.l  12(A1),D1       ; textsegmentsize
  9.                 add.l   20(A1),D1       ; datasegementsize
  10.                 add.l   28(A1),D1       ; bssegmentsize
  11.                 add.l   #324,D1         ; basepagesize
  12.  
  13.                 move.l  A1,D0
  14.                 add.l   D1,D0           ; new stack
  15.                 and.b   #$FC,D0         ; gerade Adresse
  16.                 movea.l D0,SP           ; Stack liegt im BSS
  17.  
  18.                 move.l  D1,-(SP)        ; benötigter Speicher
  19.                 move.l  A1,-(SP)        ; Startadresse
  20.                 clr.w   -(SP)           ; dummy
  21.                 move.w  #74,-(SP)       ; Mshrink
  22.                 trap    #1              ; Gemdos
  23.                 lea     12(SP),SP
  24.  
  25.                 clr.w   -(SP)
  26.                 move.l  D1,-(SP)
  27.                 move.l  A1,base_page
  28.                 add.l   A1,D1
  29.                 and.b   #$FE,D1
  30.                 move.l  D1,base_page+4
  31.                 
  32.                 bsr        vq_aes
  33.                 move.w    D0,auto_start
  34.                 clr.l   -(SP)
  35.                 move.w  #$20,-(SP)
  36.                 trap    #1
  37.                 move.l  D0,super_ret
  38.                 addq.l  #6,SP
  39.  
  40.                 tst.w    auto_start
  41.                 beq.b    install
  42.                 move.l    #$0BFFFFFF,$002C
  43.                 move.l  #$04CE,A0
  44. loop_vbl:
  45.                 addq.l  #4,A0
  46.                 move.l  (A0),D0
  47.                 bne.b   loop_vbl
  48.                 move.l  A0,vbl_slot
  49.                 move.l    #wait_for_aes,(A0)
  50.                 bra.b    leave
  51. install:
  52.                 bsr        look_fixgdos
  53.                 tst.l   D0
  54.                 bne.b   is_init
  55.  
  56. init_rout:
  57.                 move.l  $88,old_vect
  58.                 move.l  #trap_2,$88
  59.  
  60.                 move.w    auto_start,D0
  61.                 bne        return
  62. leave:
  63.                 move.l  super_ret,-(SP)
  64.                 move.w  #$20,-(SP)
  65.                 trap    #1
  66.                 addq.l  #6,SP
  67.  
  68.                 pea     init_msg
  69.                 move.w  #$09,-(SP)
  70.                 trap    #1
  71.                 addq.l  #6,SP
  72.                 
  73.                 move.w  #$31,-(SP)
  74.                 trap    #1
  75.  
  76. is_init:
  77.                 move.w    auto_start,D0
  78.                 bne        return
  79.                 move.l  super_ret,-(SP)
  80.                 move.w  #$20,-(SP)
  81.                 trap    #1
  82.                 addq.l  #6,SP
  83.  
  84.                 pea     exit_msg
  85.                 move.w  #$09,-(SP)
  86.                 trap    #1
  87.                 addq.l  #6,SP
  88.  
  89.                 move.l  (SP)+,D0
  90.                 trap    #1
  91.  
  92. ;
  93. base_page:
  94.                 DC.L 0
  95.                 DC.L 0
  96.  
  97.                 DC.B 'XBRA'
  98. my:
  99.                 DC.B 'dfGD'
  100. old_vect:
  101.                 DC.L 0
  102.  
  103. ;
  104. trap_2:
  105.                 cmpi.w  #$73,D0         ; vdi ?
  106.                 bne.b   old_trap
  107.                 movea.l D1,A0
  108.                 movea.l 0(A0),A1
  109.                 cmpi.w  #100,(A1)       ; v_opnvwk ?
  110.                 beq.b   own_trap
  111. old_trap:
  112.                 movea.l old_vect,A0
  113.                 jmp     (A0)
  114. own_trap:
  115.                 cmpi.w  #0,12(A1)
  116.                 bne.b   own2trap
  117.                 move.w  #1,12(A1)
  118. own2trap:
  119.                 movea.l 4(A0),A1
  120.                 cmpi.w  #0,0(A1)
  121.                 bne.b   old_trap
  122.                 move.w  #1,0(A1)
  123.                 bra.b   old_trap
  124. ;
  125. look_fixgdos:
  126.                 movea.l $88,A0
  127. loop:
  128.                 suba.l  #$0C,A0
  129.                 lea     xbra,A1
  130.                 move.l  #3,D1
  131. loop1:
  132.                 move.b  (A0)+,D0
  133.                 cmp.b   (A1)+,D0
  134.                 dbne    D1,loop1
  135.                 cmpi.w  #-1,D1
  136.                 bne     to_init_rout
  137.  
  138.                 lea     my,A1
  139.                 move.l  #3,D1
  140. loop2:
  141.                 move.b  (A0)+,D0
  142.                 cmp.b   (A1)+,D0
  143.                 dbne    D1,loop2
  144.                 cmpi.w  #-1,D1
  145.                 beq     to_is_init
  146.  
  147.                 movea.l 0(A0,D1.w),A0
  148.                 bra     loop
  149. to_init_rout:
  150.                 move.l    #0,D0
  151.                 rts
  152. to_is_init:
  153.                 move.l    #1,D0
  154.                 rts
  155.                 
  156.                 DC.B 'XBRA'
  157.                 DC.B 'dfGD'
  158.                 DC.L 0
  159. wait_for_aes:
  160.                 cmpi.w    #$FFFF,counter
  161.                 beq.b    waiting
  162.                 sub.w    #1,counter
  163.                 bne.b    return
  164.                 
  165.                 bsr        look_fixgdos
  166.                 tst.l   D0
  167.                 bne.b   clr_vbl
  168.                 move.w    #$80, tested
  169.                 bra     install
  170. clr_vbl:
  171.                 sub.w    #1,tested
  172.                 bne.b    wait2
  173.                 move.l    vbl_slot,A0
  174.                 clr.l    (A0)
  175.                 rts
  176. waiting:
  177.                 move.l    $002C,D0
  178.                 cmpi.l    #$0BFFFFFF,D0
  179. wait2:
  180.                 move.w    #$0090,counter
  181. return:
  182.                 rts
  183. ;
  184. vq_aes:
  185.                 move.w    #$C9,D0
  186.                 trap    #2
  187.                 tst.w    D0
  188.                 sne.b    D0
  189.                 ext.w    D0
  190.                 rts
  191. ;
  192.                 DATA
  193. super_ret:
  194.                 DC.L 0
  195. vbl_slot:
  196.                 DC.L 0
  197. auto_start:
  198.                 DC.W 0
  199. counter:
  200.                 DC.W $FFFF
  201. tested:
  202.                 DC.W $0080
  203. xbra:
  204.                 DC.B 'XBRA'
  205. init_msg:
  206.                 DC.B 13,10,"Initialize Fix-GDOS !  (c)'91 Dieter Fiebelkorn",13,10,0
  207. exit_msg:
  208.                 DC.B 13,10,"*** Fix-GDOS is already in use ! ***",13,10,0
  209. ;
  210.  
  211.                 END
  212.